//
//  CZUserAccountViewModel.swift
//  微博
//
//  Created by 范承志 on 16/6/11.
//  Copyright © 2016年 fanchengzhi. All rights reserved.
//

import UIKit

class CZUserAccountViewModel {

    //创建单例  设置全局访问点
    static let sharedTools: CZUserAccountViewModel = CZUserAccountViewModel()
    
    //用户信息对象
    var userAccountModel: CZUserAccountModel?
    
    //路径
    let file = (
        NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last! as NSString).appendingPathComponent("userAccount.archiver")
    
    //判断是否登录过
    var isLogin: Bool{
//        if accessToken == nil{
//            return false
//        }else {
//            return true
//        }
        //简写 如果accessToken ！= nil 满足的话就是true
        return accessToken != nil
    }
    
    //访问令牌
    var accessToken:String?{
        
        //代表用户登录过 而且保存过数据
        //需要判断是否过期
        //如果过期时间和当前时间比较==降序 代表没有过期
        if userAccountModel?.expires_Date?.compare(Date()) == ComparisonResult.orderedDescending{
            return userAccountModel?.access_token
        }else {
            return nil
        }
    }

    //如果外界调用sharedTools 就会走init方法
    init() {
        
        //用户模型赋值
        userAccountModel = getUserAccountModel()
    }
}

//MARK: - ViewModel帮助控制器请求数据
extension CZUserAccountViewModel{
    
    //获取token
    func getUserAccount(code: String, finish: @escaping (Bool)->()){
        
        //发送请求
        CZNetworkTools.sharedTools.oauthLoadUserAccount(code: code, success: { (response) in
            //判断response是否为nil 而且是否可以转成字典
            guard let res = response as? [String: Any] else{
                finish(false)
                return
            }
            //字典转模型
            let userAccountModel = CZUserAccountModel.yy_model(withJSON: res)
            //判断userAccountModel不为nil
            guard let model = userAccountModel else {
                finish(false)
                return
            }
            //请求用户信息
            self.getUserInfo(model: model, finish: finish)}) { (error) in
                finish(false)
                print("请求失败",error)
        }
    }
    //请求用户信息
    func getUserInfo(model: CZUserAccountModel, finish: @escaping(Bool)->()){
        
        //发送请求
        CZNetworkTools.sharedTools.oauthLoadUserInfo(model: model, success: { (response) in
            
            //判断response是否为nil 而且是否可以转成一个字典
            guard let res = response as? [String: Any] else{
                finish(false)
                return
            }
            
            //因为后期需要保存模型 直接使用一个Model即可 需要手动赋值
            model.avatar_large = res["avatar_large"] as? String
            model.screen_name = res["screen_name"] as? String
            
            //保存模型
            self.saveUserAccountModel(model: model)
            
            //最终的成功的执行闭包
            finish(true)
            }) { (error) in
                finish(false)
                print("请求失败",error)
                
        }
    }
}
//MARK: - 归档解档方法
extension CZUserAccountViewModel{
        
    //保存用户信息对象
    func saveUserAccountModel(model: CZUserAccountModel){
        //因为首次使用该类的时候会走init方法 但是我们第一次登陆app根本没有保存过个人信息数据 导致userAccountModel为nil
        //解决办法 需要外界调用该方法保存用户对象的时候 程序员手动给单例对象的userAccountModel赋值
        userAccountModel = model
        NSKeyedArchiver.archiveRootObject(model, toFile: file)
    }
    
    //获取用户信息对象
    func getUserAccountModel()->CZUserAccountModel?{
        let result = NSKeyedUnarchiver.unarchiveObject(withFile: file) as? CZUserAccountModel
        return result
    }
}
